package com.xiang._02.strategy;

/**
 * 优点：策略模式提供了对“开闭原则”的完美支持，避免使用多重条件转移语句，如if…else…语句、switch 语句
 * 缺点：调用时，必须提前知道都有哪些策略模式类，才能自行决定当前场景该使用何种策略
 */
public class StrategyEnumMain {
    public static void main(String[] args) {

        /**
         * public void save(String type, Object data) {
         *      if ("db".equals(type) {
         *          // 保存到db
         *          saveInDb(data);
         *      } else if ("file".equals(type))
         *          // 保存在文件
         *          saveInFile(data);
         *      } else if ("oss".eqauls(type)) {
         *          // 保存在oss
         *          saveInOss(type);
         *      }
         *   }
         */

            //基于策略模式的思想来解决上面的if/else问题
        SaveStrategyEnum.typeOf("OSS").save("file","save file data");
        /**
         * 主要利用的是 抽象类 + 枚举 来完成不同的策略具体实现:
         *      抽象方法的使用 （在模板设计模式中，更能体会抽象方法的使用妙处）
         *      利用枚举原生提供的 values() ，来实现遍历，找到目标
         */
    }
}
